home *** CD-ROM | disk | FTP | other *** search
- (* ==================================================================== *)
- (* === Queue ========================================================== *)
- (* ==================================================================== *)
- (*
-
- :Program. Queue.MOD
- :Contents. queue ADT based on linear lists
- :Author. Peter Fröhlich [phf]
- :Copyright. Public Domain
- :Language. Oberon (revised)
- :Translator. Amiga Oberon V2.01
- :History. V0.0 [phf] 02-Sep-1991 [created]
- :History. V1.0 [phf] 03-Sep-1991 seems to work
- :History. V1.0 [phf] 08-Sep-1991 [last edit]
-
- :Support. B. Meyer, Object-oriented Software Construction
- :Imports. -
- :Bugs. none known
-
- :Address. Ebenböckstraße 19, D-8000 München 60
- :Address. Z-NET:P.FROEHLICH@NEXT-BOX.ZER
- :Phone. (089) 820 31 72
-
- *)
- (* ==================================================================== *)
-
- MODULE Queue;
-
- (* ==================================================================== *)
- (* === Imports ======================================================== *)
- (* ==================================================================== *)
-
- IMPORT
- l : Lists;
-
- (* ==================================================================== *)
- (* === Types ========================================================== *)
- (* ==================================================================== *)
-
- TYPE
- Element* = POINTER TO ElementObject;
- ElementObject* = l.Node; (* exported to allow type-extension *)
-
- Queue* = POINTER TO l.List;
-
- (* ==================================================================== *)
- (* === Procedures ===================================================== *)
- (* ==================================================================== *)
-
- (*==== Queue creation/destruction ======================================*)
-
- (* --- Create --------------------------------------------------------- *)
- PROCEDURE Create*(VAR (*OUT*) queue: Queue);
- BEGIN
- NEW(queue);
- IF (queue # NIL) THEN
- l.Init(queue^);
- END;
- END Create;
- (* -------------------------------------------------------------------- *)
-
- (* --- Discard -------------------------------------------------------- *)
- PROCEDURE Discard*(VAR (*INOUT*) queue: Queue);
- BEGIN
- DISPOSE(queue);
- queue := NIL;
- END Discard;
- (* -------------------------------------------------------------------- *)
-
- (*==== Accessing a queue ===============================================*)
-
- (* --- Put ------------------------------------------------------------ *)
- PROCEDURE Put*(VAR (*INOUT*) queue: Queue; element: Element);
- BEGIN
- l.AddTail(queue^,element);
- END Put;
- (* -------------------------------------------------------------------- *)
-
- (* --- Get ------------------------------------------------------------ *)
- PROCEDURE Get*(VAR (*INOUT*) queue: Queue): Element;
- BEGIN
- RETURN l.RemHead(queue^);
- END Get;
- (* -------------------------------------------------------------------- *)
-
- (* --- Head ----------------------------------------------------------- *)
- PROCEDURE Head*(VAR (*IN*) queue: Queue): Element;
- BEGIN
- RETURN l.Head(queue^);
- END Head;
- (* -------------------------------------------------------------------- *)
-
- (*==== Status of a queue ===============================================*)
-
- (* --- Empty ---------------------------------------------------------- *)
- PROCEDURE Empty*(VAR (*IN*) queue: Queue): BOOLEAN;
- BEGIN
- RETURN l.Empty(queue^);
- END Empty;
- (* -------------------------------------------------------------------- *)
-
- (* --- Full ----------------------------------------------------------- *)
- PROCEDURE Full*(VAR (*IN*) queue: Queue): BOOLEAN;
- BEGIN
- RETURN FALSE; (* this implementation can never be full *)
- END Full;
- (* -------------------------------------------------------------------- *)
-
- (* --- Elements ------------------------------------------------------- *)
- PROCEDURE Elements*(VAR (*IN*) queue: Queue): LONGINT;
- BEGIN
- RETURN l.CountElements(queue^);
- END Elements;
- (* -------------------------------------------------------------------- *)
-
- (* ==================================================================== *)
- END Queue.
- (* ==================================================================== *)
-